Current printer drivers and printing processes required to provide printing functionality can compromise a system's stability. A printer driver typically includes at least two components: a rendering driver and a print processor. GDI is a system Graphics Device Interface. A printer driver implements a Driver Device Interface (DDI), which is graphical, but not the GDI. The GDI receives requests from an application to draw graphic primitives and, in turn, passes them on to the printer driver. The printer driver then converts these primitives to a print-ready format such as PCL or Postscript.
The application uses GDI and the print driver to send graphics primitives to a file managed by the print spooler. The print processor, running in the print spooler, then retrieves the graphics primitives from the GDI or the printer driver in the application space. To produce the output for the printer, the print processor retrieves recorded primitives and drives them through the GDI and the printer driver again.
These and other current printer-driver models suffer from poor designs that can lead to the crippling of an entire system. Prior-art printer drivers can bring a system down if the driver becomes corrupt. Running with almost unrestricted privileges, current drivers are inherently insecure. Diagnosing problems stemming from faulty printer drivers is currently highly complex.
Currently, a printer driver runs with the full privileges of a print system. Thus, a poorly (or defectively) written printer driver can substantially damage both the print system and the operating system as a whole. Prior-art printer drivers can inadvertently modify the state of a print system because they share the same address space. Drivers can also modify each others' state. Further, bugs in the print system can result in the driver's state being changed. Determining a source of driver failure can be extremely difficult. Printer-system reliability and diagnostic ability are currently inadequate and there is no effective way to restrict privileges of driver code. Finally, flaws in a printer driver could be exploited to allow the system to be attacked.
The current state of the art could be improved by providing a better printer-driver system and method for implementing the same by sandboxing the printing process.